

// 哈希解法
// var lengthOfLongestSubstring = function(s) {
    // const chartSet = new Set()
    // let left = 0
    // let maxLenghtNum = 0
    // for (let right = 0; right < s.length; right++) {
    //     while (chartSet.has(s[right])) {
    //         chartSet.delete(s[left])
    //         left++
    //     }
    //     chartSet.add(s[right])
    //     maxLenghtNum = Math.max(maxLenghtNum, right - left + 1)
    // }
    // return maxLenghtNum
// };

// 滑动解法
function lengthOfLongestSubstring (s) {
    // map
    const chartMap = new Map();
    // 左针右移
    let left = 0; 
    let maxLenghtSum = 0;

    for (let right = 0; right < s.length; right++) {
        const currentChart = s[right]
        // 出队
        if (chartMap.has(currentChart) && chartMap.get(currentChart) >= left) {
            left = chartMap.get(currentChart) + 1
        }
        // 入队
        chartMap.set(currentChart, right)
        // 闭区间长度计算
        maxLenghtSum = Math.max(maxLenghtSum, right - left + 1)
    }
    return maxLenghtSum
}
console.log(lengthOfLongestSubstring('abcabcbb'))